#ifndef MULTICOULEURS_H
#define MULTICOULEURS_H

#include "EffetBase.hpp"

#include "Bruit/Bruit.hpp"

/**
 * Classe qui implémente un matériau multicolore : on peut utiliser un
 * nombre quelconque de couleurs, qui sont mélangées d'après la valeur
 * du buit de Perlin assicié au point de la surface. Il faut également
 * définir des seuils, pour savoir quelle est l'interpolation à faire.
 *
 * @author Johan "Solo" Luisier
 *
 * @date 2010
 */
class MultiCouleurs : public EffetBase
{
 public:
  MultiCouleurs(const double& refl = 0., const double& trans = 0.,
		const double& indice = 1., const double& reg = 0.,
		const std::vector< Couleur >& couleurs =
		boost::assign::list_of( Couleur( 0, 0, 0 ) )
		( Couleur( 255, 255, 255 ) ),
		const std::vector< double >& mel =
		boost::assign::list_of( 0. )( 1. ),
		const double& coeff = 1.);
  MultiCouleurs(const double& refl, const double& trans, const double& indice,
		const double& reg, const double& bruit,
		const std::vector< Couleur >& couleurs,
		const std::vector< double >& mel,
		const double& coeff);
  ~MultiCouleurs();
  Couleur couleur(const Coord&);
  double valeurBruit(const Coord& pt) const;
 protected:
  /**
   * Générateur de bruit de Perlin.
   */
  Perlin::Bruit Generateur;
};

#endif // MULTICOULEURS_H
